iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
Software Development

數位醫療與雲原生第一次的親密接觸系列 第 26

Day 26 [ 雲原生 ( Cloud Native ) ] K8S安裝Prometheus

  • 分享至 

  • xImage
  •  

使用Prometheus Operator在K8S上安裝Prometheus

一、 簡介

Prometheus Operator是一個用來協助在K8S上部署Prometheus的工具,我是使用此方式進行Prometheus在K8S上的部署。

我使用的版本是Prometheus Operator的v0.13.0版本(因為我的K8S版本為1.27.1)
https://ithelp.ithome.com.tw/upload/images/20241004/201619875dXqkva9BN.png

二、 下載Prometheus Operator

https://github.com/prometheus-operator/kube-prometheus 選擇版本

https://github.com/prometheus-operator/kube-prometheus/releases/tag/v0.13.0

下載Source code (tar.gz 或是 .zip都可以 ) ,下載完成後使用scp將壓縮檔傳到VM上。

將壓縮檔解壓縮後

# cd 到檔案夾
cd kube-prometheus-0.13.0

# cd 到manifests
cd manifests

# cd 到setup
cd setup

# 建立CRD資源
sudo kubectl create -f .

# 搜尋CRD資源是否建立
sudo kubectl get crd |grep coreos


二、 下載Prometheus Operator所需要的image

使用Prometheus Operator在K8S上安裝Prometheus所需要下載的image

docker pull ${image}

# image
------------------------------------------------------------------
quay.io/prometheus/node-exporter:v1.6.1

docker.io/grafana/grafana:9.5.3

quay.io/prometheus/blackbox-exporter:v0.24.0

quay.io/prometheus/alertmanager:v0.26.0

jimmidyson/configmap-reload:v0.5.0

registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.9.2

registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.11.1

quay.io/prometheus-operator/prometheus-operator:v0.68.0

quay.io/prometheus/prometheus:v2.47.2

quay.io/prometheus-operator/prometheus-config-reloader:v0.68.0

quay.io/brancz/kube-rbac-proxy:v0.15.0
------------------------------------------------------------------

### 將image拉下來後,需要將image打包成.tar後上傳至需部署的VM上,再將.tar還原為image,進行下一步的部署

# 將本機的image打包為.tar檔
docker save -o ${tar name}.tar ${image name}

### 註:使用docker save時,後面需要接image name,這樣之後還原時才會有image name,如果是用image ID ,則還原後只會有image ID ,不會保留image name,在進行K8S部署時會麻煩很多,如部署的服務版本管控。

# 使用scp將本機的.tar檔傳至VM上

# 將.tar檔還原為image
ctr --namespace=k8s.io images import ${tar name}.tar

### 註: 1.27.1版本的K8S是使用containerd構建的,所以如果需要將外界的.tar檔還原為image,需要使用以上指令,將.tar檔還原成位於k8s.io namespace的image,這樣K8S才拉取的到image。若是1.21版本的K8S則使用docker load -i ${.tar name}.tar

# 檢查是否成功還原image,列出image
crictl image ls


三、 執行Prometheus Operator

修改grafana和Prometheus的service.yml

# cd 回上一層資料夾(manifest)
cd ..


# 修改prometheus-service.yaml

vim prometheus-service.yaml
-----------------------------------------------------------------------
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 2.47.2
  name: prometheus-k8s
  namespace: monitoring
spec:
# 將service的type改成NodePort,預設為clusterIP(K8S內部使用的虛擬IP),service改為NodePort將服務暴露出去,可從外界存取(在ports新增nodePort的port號)
  type: NodePort
  ports:
  - name: web
    port: 9090
    targetPort: web
    nodePort: 30019
  - name: reloader-web
    port: 8080
    targetPort: reloader-web
    nodePort: 30020
  selector:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
  sessionAffinity: ClientIP

-----------------------------------------------------------------------



# 修改grafana-service.yaml

vim grafana-service.yaml
---------------------------------------------------------------------
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 9.5.3
  name: grafana
  namespace: monitoring
spec:
# 將service的type改成NodePort,預設為clusterIP(K8S內部使用的虛擬IP),service改為NodePort將服務暴露出去,可從外界存取(在ports新增nodePort的port號)
  type: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 30022
  selector:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
-----------------------------------------------------------------------


修改完畢後apply所有yml檔

# create所有資源
kubectl create -f .

### 註:所有的pod、service等等都創建於monitoring namespace裡

# 檢查是否成功創建了Prometheus Operator的CRD
kubectl get crd |grep coreos

# 檢查是否成功創建了POD
kubectl get pods -n monitoring

# 檢查是否成功創建了Service,需檢查Prometheus-k8s和grafana的type是否為nodeport和對外的port是否正確

kubectl get svc -n monitoring


四、Grafana新增Prometheus的data source

輸入 http://${目標IP} : ${garana的nodeport}/login 後出現登入畫面
https://ithelp.ithome.com.tw/upload/images/20241003/20161987XL9pHV2oFs.png
預設帳號密碼為 帳號:admin、密碼:admin

進入主畫面後按下 "Add your first data source "
https://ithelp.ithome.com.tw/upload/images/20241003/20161987ZHNKSAGmfB.png

選擇Prometheus
https://ithelp.ithome.com.tw/upload/images/20241003/20161987cyApDXJzjU.png

在URL部分輸入 http://${目標IP} : ${prometheus的nodeport}/

按 save & test,成功後即代表data source新增成功
https://ithelp.ithome.com.tw/upload/images/20241003/20161987kgPxccdhjY.png

可以在"Explore"部份下promQL,查詢metrics
https://ithelp.ithome.com.tw/upload/images/20241003/20161987jtEejxoW5L.png

選擇Dashboards,New 一個 import
https://ithelp.ithome.com.tw/upload/images/20241003/20161987OhAPcwYLdo.png

輸入JSON或是上傳.json檔案
https://ithelp.ithome.com.tw/upload/images/20241003/20161987zxaOA3KmNM.png

推薦使用 " Node Exporter Full " 這個dashboard ( https://grafana.com/grafana/dashboards/1860-node-exporter-full/ )
https://ithelp.ithome.com.tw/upload/images/20241004/20161987EfiO5ZaJxg.png

這是我新增的Dashboards,有Prometheus和LOKI的Dashboards,如果需要其他的Dashboards,可以在grafana搜尋( https://grafana.com/grafana/dashboards/ )

https://ithelp.ithome.com.tw/upload/images/20241004/201619877jtPzxsoBK.png

Grafana可以註冊多個data source,所以可以在grafana上新增以K8S方式安裝的Prometheus 的data source和新增以二進制安裝的Prometheus 的data source。

https://ithelp.ithome.com.tw/upload/images/20241004/20161987VbSv9NV0nx.png

以上安裝所需的安裝包都可以在網路上下載到。使用Prometheus不僅可以監控目前的流量及服務狀態,還能透過流量狀態優化程式碼,減少deadlock的發生和memory的優化。


上一篇
Day 25 [ 雲原生 (Cloud Native ) ] Prometheus 二進制部署 & 監控 Tomcat
下一篇
Day 27 [ 雲原生 (Cloud Native)] docker-compose安裝Loki(Loki、Promtail、Grafana)
系列文
數位醫療與雲原生第一次的親密接觸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言